package com.youzikj.wx.core.service;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.youzikj.wx.core.pojo.Pub;
import com.youzikj.wx.core.pojo.Sub;
import com.youzikj.wx.core.pojo.Task;
import com.youzikj.wx.core.pojo.User;

public interface CoreService {

	/**
	 * 发布任务：需设置image_url、title、link、amount、total_num、start_time、end_time、pub（openid）；
	 * 通过openid查询是否存在发布者，如果不存在，则添加；
	 * 添加任务（自动计算total_amount、task_amount、platform_amount）
	 * @param task 任务
	 */
	void pubTask(Task task);
	
	/**
	 * 领取任务：需设置taskId、openid；
	 * 通过openid查询是否存在领取者，如果不存在，则添加；
	 * 保存任务-领取者关联关系
	 * @param taskId 任务ID
	 * @param sub 领取者
	 */
	void subTask(Integer taskId, String openid, String posterUrl);
	
	/**
	 * 识别二维码：需设置openId、taskId、subId；
	 * 如果任务已结束，则不进行任何操作；
	 * 通过openid查询是否存在用户，如果不存在，则添加；
	 * 保存任务-领取者-用户关联关系；
	 * 修改任务推广次数（加1），如果推广次数等于总次数，则将任务修改为已结束
	 * @param openId 用户openid
	 * @param taskId 任务ID
	 * @param subId 领取者ID
	 */
	void qrCode(String openId, Integer taskId, Integer subId);
	
	/**
	 * 结束任务：如果任务已过结束日期且状态为未结束，则将任务状态修改为已结束
	 */
	void finishTask();
	
	/**
	 * 发送红包：查询已结束未发送红包未结算的任务；
	 * 通过任务ID、领取者ID查询推广次数大于10次的领取者；
	 * 通过任务ID、领取者ID查询领取者的红包记录，如果已发送完整红包，则跳过，否则发送红包，发送成功，则保存红包记录；
	 * 如果红包全部发送成功，则将任务的红包状态修改为已发送
	 */
	void red();
	
	/**
	 * 退款：查询已结束已发送红包未退款的任务；
	 * 通过任务ID查询已发放红包金额、通过任务ID查询已退款金额，计算出退款金额；
	 * 退款；
	 * 如果退款成功，则保存退款记录，并修改退款状态为已退款
	 */
	void refund();
	
	/**
	 * 查询所有任务
	 */
	List<Task> all();

	/**
	 * 查询任务
	 */
	public Task getBySubId(Integer taskId, Integer subId);
	
	/**
	 * 	查询任务
	 */
	Task get(Integer taskId);
}

